<?php


namespace app\index\model;

use think\Model;

class User extends Model
{
    // 设置完整的数据表（$table需手动加上前缀）
    protected $table = 'think_user';
    //设置数据表（$name会自动加上设置的前缀)
//    protected $name = 'member';
    //定义类型转换
    protected $type = [
        // 设置birthday为时间戳类型
        'birthday' => 'datetime:Y/m/d',
    ];
    // 定义自动写入时间戳的类型
//    protected $autoWriteTimestamp = 'datetime';
    //设置连接的信息，可以在这里更改数据库，地址，密码，端口，等等
    // 定义自动完成的属性
    protected $insert = ['status' => 1, 'password' => '1234'];
    protected $connection = [
        // 数据库类型
        'type' => 'mysql',
        // 服务器地址
        'hostname' => '127.0.0.1',
        // 数据库名
        'database' => 'demo',
        // 数据库用户名
        'username' => 'root',
        // 数据库密码
        'password' => '123456',
        // 数据库连接端口
        'hostport' => '',
        // 数据库连接参数
        'params' => [],
        // 数据库编码默认采用utf8
        'charset' => 'utf8',
        // 数据库表前缀
        'prefix' => 'think_',
        'auto_timestamp' => true,
        // 数据库调试模式
        'debug' => true,];
    // birthday读取器
    // 读取器方法的命名规范是： get + 属性名的驼峰命名+ Attr 所以，
    // getBirthdayAttr 读取器读取的是 birthday 属性，而 getUserBirthdayAttr 读取器读取的 则是 user_birthday 属性
    // 而且只能用[]访问，用->访问报错
    protected function getBirthdayAttr($birthday)
    {
        return date('Y-m-d', $birthday);
    }

    // birthday修改器
    protected function setBirthdayAttr($value)
    {
        return strtotime($value);
    }

    // status属性修改器
    protected function setStatusAttr($value, $data)
    {
        return '流年' == $data['nickname'] ? 1 : 2;
    }

    //status属性读取器
    protected function getStatusAttr($value)
    {
        $status = [-1 => '删除', 0 => '禁用', 1 => '正常', 2 => '待审核'];
        return $status[$value];
    }

    // user_birthday读取器
    protected function getUserBirthdayAttr($value, $data)
    {
        return date('Y-m-d', $data['birthday']);
    }

    // email查询
    protected function scopeEmail($query)
    {
        $query->where('email', 'thinkphp@qq.com');
    }

    // status查询
    protected function scopeStatus($query)
    {
        $query->where('status', 1);
    }

    // 全局查询范围
    protected static function base($query)
    {
        // 查询状态为1的数据
        $query->where('status', 1);
    }

    // 开启自动写入时间戳
    protected $autoWriteTimestamp = true;

    // 定义关联方法
    public function profile()
    {
        // 用户HAS ONE档案关联
        return $this->hasOne('Profile');
    }

    // 定义一对多关联
    public function books()
    {
        return $this->hasMany('Book');
    }

    // 定义多对多关联
    public function roles()
    {
        // 用户 BELONGS_TO_MANY 角色
        return $this->belongsToMany('Role', 'access');
    }
}